package pe.com.hermes.hermetic.web.controller.reportes;

import pe.com.hermes.hermetic.beans.AuditBean;
import pe.com.hermes.hermetic.negocio.service.HermeticFacade;
import pe.com.hermes.hermetic.web.controller.base.IController;
import pe.com.hermes.hermetic.web.controller.general.MostrarReporteController;
import pe.com.hermes.hermetic.web.forms.HMF4004Form;
import pe.com.hermes.hermetic.web.forms.HMF4010Form;
import pe.com.hermes.hermetic.negocio.ultil.ConstantesHermetic;
import pe.com.hermes.hermetic.negocio.ultil.Util;

import pe.com.hermes.hermetic.web.controller.base.IWebOpciones;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;

@RequestMapping("/mostrarHWF4004.html")
@SessionAttributes(value={"codOpci","desOpci"})
@Controller
public class ServicioCompensacionController implements IController{

    private Logger logger = Logger.getLogger(this.getClass());
    
    @Autowired
    private HermeticFacade servicioHermetic;
    
    @Autowired
    private MostrarReporteController reporteFactory;  
    
    @RequestMapping(method=RequestMethod.GET)
    protected String showForm(ModelMap model, HttpServletRequest request) throws Exception {

        HttpSession session = request.getSession(false);        
        if (request.getSession().getAttribute("usuario") == null)
            return FORM_SESSION_FINISH;

        List listaTransacciones = (List)session.getAttribute("listaMenu3");
        if (!Util.validaAccesoOpcion(listaTransacciones, ConstantesHermetic.REPORTE_SERVICIO_COMPENSACION)) {
            return FORM_ACCESS_NULL_VIEW;
        }

        String cliente = (String)request.getSession().getAttribute("cliente");
        String sucursal = (String)request.getSession().getAttribute("sucursal");

        HMF4004Form form = new HMF4004Form();
        form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);

        try {
            List listadoPuntos = servicioHermetic.getPuntos(sucursal, cliente);
            if (listadoPuntos != null) {
                //request.setAttribute("listadoPuntos", listadoPuntos);
                model.put("listadoPuntos", listadoPuntos);
            }
            AuditBean auditBean = new AuditBean(SERV_COMP);
            servicioHermetic.inseAudit(auditBean);
            String fecha = servicioHermetic.getFechaHoy();
            form.setFechadesde(fecha);
            form.setFechahasta(fecha);      
            String codOpci = IWebOpciones.SERV_COMP;
            String desOpci = servicioHermetic.getDesOpci(codOpci, request);
            model.put("codOpci",codOpci);
            model.put("desOpci",desOpci);
            model.put(FORM_KEY,form);  
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("Error en el proceso. "+ e);
            return FORM_ERROR_VIEW;
        }        

        return FORM_SERV_COMPENSACION_VIEW;
    }

    @RequestMapping(params="accion=mostrar")
    private String mostrar (ModelMap model,@ModelAttribute(FORM_KEY) HMF4004Form form, HttpServletRequest request) throws Exception {    
    
        HttpSession session = request.getSession(false);        
        if (request.getSession().getAttribute("usuario") == null)
            return FORM_SESSION_FINISH;

        List listaTransacciones = (List)session.getAttribute("listaMenu3");
        if (!Util.validaAccesoOpcion(listaTransacciones, ConstantesHermetic.REPORTE_SERVICIO_COMPENSACION)) {
            return FORM_ACCESS_NULL_VIEW;
        }    
        form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
        
        int accionMapa = 1;
        String cliente = (String)request.getSession().getAttribute("cliente");
        String sucursal = (String)request.getSession().getAttribute("sucursal");
        String Fechadesde = form.getFechadesde();
        String Fechahasta = form.getFechahasta();
        String punto = form.getPunto();
        try {
            List listadoPuntos = servicioHermetic.getPuntos(sucursal, cliente);
            if (listadoPuntos != null) {
                //request.setAttribute("listadoPuntos", listadoPuntos);
                model.put("listadoPuntos", listadoPuntos);                
            }
            List listaServicioCompensacion = 
                servicioHermetic.getServicioCompensacion(Fechadesde, 
                                                               Fechahasta, 
                                                               sucursal, 
                                                               cliente, punto);

            DecimalFormatSymbols dfs = new DecimalFormatSymbols();
            dfs.setDecimalSeparator('.');
            dfs.setGroupingSeparator(',');
            DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
            df1.setGroupingSize(3);

            List listaServicioCompensacionTotal = 
                servicioHermetic.getServicioCompensacionTotal(Fechadesde, 
                                                               Fechahasta, 
                                                               sucursal, 
                                                               cliente, punto);
            /*
            request.setAttribute("listaServicioCompensacion", listaServicioCompensacion);
            request.setAttribute("listaServicioCompensacionTotal", listaServicioCompensacionTotal);
            request.setAttribute("fechadesde", Fechadesde);
            request.setAttribute("fechahasta", Fechahasta);
            */
            model.put("listaServicioCompensacion", listaServicioCompensacion);
            model.put("listaServicioCompensacionTotal", listaServicioCompensacionTotal);
            model.put("fechadesde", Fechadesde);
            model.put("fechahasta", Fechahasta);
            
            form.setFechadesde(Fechadesde);
            form.setFechahasta(Fechahasta);
            form.setCliente(cliente);
 
            model.put(FORM_KEY,form);  
        } catch (Exception e) {
            e.printStackTrace();
            //accionMapa = 0;
            return FORM_ERROR_VIEW;
        }

        return FORM_SERV_COMPENSACION_VIEW;
    }

    @RequestMapping(params="accion=mostrarReporte")
    private void mostrarReporte (ModelMap model,@ModelAttribute(FORM_KEY) HMF4004Form form, HttpServletRequest request, HttpServletResponse response) throws Exception {    
    
        
        model.put("sucursal",form.getSucursal());
        model.put("codPunto",form.getPunto());
        
        String codClie=(String)request.getSession(false).getAttribute("cliente");
        reporteFactory.mostraReporte(request, response,codClie);
            
    }


}
